/**
    算法描述： 模拟题，正常for循环嵌套遍历即可
    解决所需数据结构+算法：
**/
#include<iostream>
#include<cstring>
using namespace std;

int a[110][110];

int main() {
    memset(a, 0, sizeof(a));
    int n, m;
    cin >> n >> m;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            char ch;
            cin >> ch;
            if(ch == '*') { // 对雷周围的8个格子进行自增（自增的前提是存在该格子）
                if(i>1 && j>1 && a[i-1][j-1]!=-1)   a[i-1][j-1]++;
                if(i>1 && a[i-1][j]!=-1)   a[i-1][j]++;
                if(i>1 && j<m && a[i-1][j+1]!=-1)   a[i-1][j+1]++;
                if(j>1 && a[i][j-1]!=-1)   a[i][j-1]++;
                a[i][j] = -1; // 对雷的位置打上标记
                if(j<m && a[i][j+1]!=-1)   a[i][j+1]++;
                if(i<n && j>1 && a[i+1][j-1]!=-1)   a[i+1][j-1]++;
                if(i<n && a[i+1][j]!=-1)   a[i+1][j]++;
                if(i<n && j<m && a[i+1][j+1]!=-1)   a[i+1][j+1]++;
            }
        }
    }

    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            if(a[i][j] == -1)   cout << "*";
            else cout << a[i][j];
        }
        cout << endl;
    }
    
    return 0;
}